class Solution {
public:
 
    bool isDigtalOrWord(char ch){   
        if(ch >= 'a' && ch <= 'z' || \
           ch >= '0' && ch <= '9' || \
           ch >= 'A' && ch <= 'Z'){
               return true;
        }
        return false;
    }
    bool isPalindrome(string s) {
	    int len = s.size();
	    if (len == 0 || len == 1){    //空串 或 只有一个字符
	    	return true;
	    }
    
        // int num= 0;
	    // for (int i = 0; i < len; ++i){
	    // 	if (s[i] >= 'A' && s[i] <= 'Z'){
        //         num++;
	    // 		s[i] += 32;  //全部转成小写字母
	    // 	}
        //     else if(s[i] >= 'a' && s[i] <= 'z' || \
        //            s[i] >= '0' && s[i] <= '9'){
        //         num++;
        //     }  
	    // }
        // if(num == 0 || num == 1){
        //     return true;
        // }

	    int left = 0;
	    int right = len - 1;
        int ret = false;
	//     while (left < right){
	//     	if (isDigtalOrWord(s[left])){
	//     		if (isDigtalOrWord(s[right])){
	//     			if (s[left] == s[right]){
	//     				left++;
	//     				right--;
    //                     ret = true;
	//     			}
	//     			else{ return false; }
	//     		}
	//     		else{ right--; }
	//     	}
	//     	else{ left++; }
	//     }
	// return ret;
    

        for(int i = 0; i < len; ++i){
             s[i] = tolower(s[i]); //忽略大小写  
        }

        while(left < right){
            while(left<right && !isDigtalOrWord(s[left])){
                left++;   //找到左边第一个未比较的字符或数字
            }
            while(left<right && !isDigtalOrWord(s[right])){
                right--;  //找到右边第一个未比较的字符或数字
            } 
            if (s[left] == s[right]){
	         	left++;
	        	right--;
                ret = true;
	       	}
            else{ return false; }
        }
        return ret;
        }
};